import {
  createApp
} from './main'

export default context => {
  // 因为有可能会是异步路由钩子函数或组件，所以我们将返回一个 Promise，
  // 以便服务器能够等待所有的内容在渲染前，
  // 就已经准备就绪。
  return new Promise((resolve, reject) => {
    const {
      app,
      router,
      store
    } = createApp()
    const meta = app.$meta()
    router.push(context.url)
    context.meta = meta


    router.onReady(() => {
      // 将状态附加到上下文，
      // 并且 `template` 选项用于 renderer 时，
      // 状态将自动序列化为 `window.__INITIAL_STATE__`，并注入 HTML。
      context.state = store.state

      resolve(app)
    }, reject)
    context.rendered = () => {
      console.log('renderer')
    }
  })
}